package com.xbongbong.pro.service.toolbox.statistic.util;

import com.xbongbong.paas.toolbox.util.StringUtil;
import com.xbongbong.saas.constant.StringConstant;

/**
 * 业绩目标工具类
 * @author zcp
 * @version v1.0
 * @date 2019/3/29 15:27
 * @since v1.0
 */
public class PerformanceUtil {


    /**
     * 处理目标：
     * （1）如果目标为null、或者-1，则直接返回
     * （2）如果设置了目标，则把目标格式为“#,##0.00”的形式
     *
     * @param target
     * @return
     * @throws
     * @author hongxiao
     * @date: 2019-02-20 16:32
     * @version v1.0
     * @since v1.0
     * @update by zcp 从main-service移入 2019-03-29
     */
    public static Object formatTarget(Double target) {
        if (target == null || target == -1) {
            return target;
        }
        return StringUtil.formatDouble(target);
    }
    /**
     * 处理完成率：（返回double或string）
     * （1）如果目标为null、或者-1，则直接返回与目标值一直（代表不在考核对象，或未设置）
     * （2）如果设置了目标，则计算，且计算结果处理成保留2位小数的数值
     *
     * @param target 目标值
     * @param finish 完成值
     * @return
     * @throws
     * @author hongxiao
     * @date: 2019-02-20 16:33
     * @version v1.0
     * @since v1.0
     * @update by zcp 从main-service移入 2019-03-29
     */
    public static Object formatRate(Double target, Double finish) {
        if (target == null || target == -1) {
            return target;
        }
        // 前端显示为“n%”，这样直接拼“%”即可
        Double rate = StringUtil.getRate(finish, target, 100);
        return StringUtil.formatDecimal(rate);
    }

    /**
     * 处理完成率：（返回double）
     * （1）如果目标为null、或者-1，则直接返回与目标值一直（代表不在考核对象，或未设置）
     * （2）如果设置了目标，则计算，且计算结果处理成保留2位小数的数值
     *
     * @param target 目标值
     * @param finish 完成值
     * @return
     * @throws
     * @author hongxiao
     * @date: 2019-02-20 21:40
     * @version v1.0
     * @since v1.0
     * @update by zcp 从main-service移入 2019-03-29
     */
    public static Double formatRate2Double(Double target, Double finish) {
        return StringUtil.toDouble(formatRate(target, finish).toString(), 0D);
    }

    /**
     * 处理未完成值：（返回String）
     * （1）如果目标为-1，则直接返回“--”
     * （2）如果设置了目标，则计算，且计算结果处理成保留2位小数的数值
     *
     * @param target 目标值
     * @param finish 完成值
     * @return
     * @throws
     * @author 梅伟丁
     * @date: 2022-3-31 17:01
     * @version v1.0
     * @since v1.0
     */
    public static String calculateUnFinish4Target(Double target, Double finish) {
        Double unFinish = null;
        // 未设置目标
        if (Double.doubleToLongBits(target) ==  Double.doubleToLongBits(-1D)){
            return StringConstant.DOUBLE_LINE;
        }else {
            // 完成值大于目标值
            if (Double.doubleToLongBits(target) <= Double.doubleToLongBits(finish)){
                unFinish = 0D;
            }else {
                // 完成值小于目标值
                unFinish = target - finish;
            }
        }
        return StringUtil.formatDouble(unFinish);
    }
}
